package cn.wolfcode.wolf2w.listener;

import cn.wolfcode.wolf2w.domain.Strategy;
import cn.wolfcode.wolf2w.redis.IStrategyStatisVoRedisService;
import cn.wolfcode.wolf2w.service.IStrategyService;
import cn.wolfcode.wolf2w.vo.StrategyStatisVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * Redis缓存数据初始化 监听器
 * 监听spring容器
 */
/*@Component*/
public class RedisDataInitListener implements ApplicationListener<ContextRefreshedEvent> {

    @Autowired
    private IStrategyStatisVoRedisService strategyStatisVoRedisService;
    @Autowired
    private IStrategyService strategyService;

    @Override
    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
        System.out.println("-----------stater 开始--------------");
        /**
         * 初始化，把 mongodb的 strategy 攻略全部查询出来，
         * 如果数据量大，建议不要查询全部，可以适当先查询一些，等到后续需要，再从 mongodb中获取
         * 存入到 Redis 中的 vo 对象中
         *
         * 存在问题：如果这个vo对象的数据进行修改，但是并没有保存到 mongodb中，
         * 下一次初始化时，mongodb的数据会将 redis的数据进行覆盖，可以判断vo 对象已经是否存在Redis中
        */
        List<Strategy> strategyList = strategyService.list();
        for (Strategy strategy : strategyList) {
            if (strategyStatisVoRedisService.isVoExists(strategy.getId())){
                continue;
            }
            StrategyStatisVO vo = new StrategyStatisVO();
            BeanUtils.copyProperties(strategy,vo);
            vo.setStrategyId(strategy.getId());
            strategyStatisVoRedisService.setStrategyStaticVO(vo);
        }
        System.out.println("-----------end 结束--------------");
    }
}
